In object-oriented programming, an “object” is a data structure consisting of one or more properties, and zero or more methods along with interactions. Other pieces of software may interact with the object by calling methods of the object, causing the object to execute a procedure or function potentially reading and/or altering one or more of its properties, and afterward potentially sending another message with the results of processing. An “object-oriented program” may be viewed as a collection of interacting objects, each processing data upon receiving a message, and potentially also generating a message for communication to other objects.
Objects may also have metadata, which do not describe properties of the object, but rather assists in the use of the object. For instance, metadata might be read for purposes of displaying members of the object, or persisting the object to a store. When the object is authored, to the extent that the author may think of ways that the object may be used, the author may create the object with appropriate metadata that will assist with the anticipated uses of the object. Should unanticipated uses for the object arise for which additional metadata might be useful, the “TypeDescriptor” framework in .NET allows for flexibly adding metadata to an object.